import 'dotenv/config';
import express from 'express';
import mongoose from 'mongoose';
import cors from 'cors';
import morgan from 'morgan';
import { dirname, join } from 'path';
import { fileURLToPath } from 'url';

// 导入数据库服务
import { initDB } from './utils/dbService.js';

// 导入路由
import questionsRoutes from './routes/questions.js';

const __dirname = dirname(fileURLToPath(import.meta.url));

// 初始化Express应用
const app = express();
const PORT = process.env.PORT || 5000;

// 中间件
app.use(cors());
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true }));
app.use(morgan('dev'));

// 数据库连接状态
let isMongoConnected = false;

// 内存存储作为备选方案
const memoryStorage = {
  questionBanks: []
};

// 数据库连接
mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/falian-yunji')
  .then(() => {
    console.log('MongoDB连接成功');
    isMongoConnected = true;
  })
  .catch(err => {
    console.error('MongoDB连接失败:', err);
    console.log('将使用内存存储作为备选方案');
  });

// 设置路由
app.use('/api/questions', questionsRoutes);

// 添加一个路由来检查服务器状态
app.get('/api/status', (req, res) => {
  res.status(200).json({ status: 'ok', message: '服务器正常运行' });
});

// 前端静态文件服务
if (process.env.NODE_ENV === 'production') {
  app.use(express.static(path.join(__dirname, '../frontend/build')));
  app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, '../frontend/build', 'index.html'));
  });
}

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ error: '服务器内部错误', message: err.message });
});

// 初始化并启动服务器
async function startServer() {
  try {
    await initDB();
    console.log('数据库初始化完成');
    
    app.listen(PORT, '0.0.0.0', () => {
      console.log(`服务器运行在端口 ${PORT}，并监听在所有网络接口上`);
    });
  } catch (err) {
    console.error('服务器启动失败:', err);
    process.exit(1);
  }
}

startServer();
